package gang.com.twoshopping.utils;

import android.content.Context;
import android.util.SparseArray;

import com.google.gson.reflect.TypeToken;

import java.util.ArrayList;
import java.util.List;

import gang.com.twoshopping.bean.ShoppingCart;

/**
 * Created by Administrator on 2017/8/7.
 */
public class CartProvider {
    public static final String CART_JSON="cart_json";
    private SparseArray<ShoppingCart> data = null;
    private Context mContext;
    public CartProvider(Context context) {
        //默认初始化10条数据
        data = new SparseArray<>(10);
        this.mContext=context;
        listToSparse();
    }

    public void put(ShoppingCart cart) {
        //如何判断购物车界面有那个商品就不添加那条item只是加一，key value形式保存
        ShoppingCart temp=data.get(cart.getId().intValue());
        if (temp!=null){
            temp.setCount(temp.getCount()+1);
        }else
        {
            temp=cart;
            temp.setCount(1);
        }
        data.put(cart.getId().intValue(),temp);
        commit();
    }

    public void update(ShoppingCart cart) {
        //put默认就是更新数据
        data.put(cart.getId().intValue(),cart);
        commit();
    }

    public void delete(ShoppingCart cart) {
    data.delete(cart.getId().intValue());
        commit();
    }

    /**
     * 获取所有数据的方法
     */

    public List<ShoppingCart> getAll() {
        return  getDataFromLocal();
    }

    /**
     * 每次对数据进行修改后，都要向缓存或者服务器重新提交一次数据
     */
    public void commit(){
        //如果是多平台，需要向云端服务器post数据
        List<ShoppingCart> carts = sparseToList();
        PreferencesUtils.putString(mContext,CART_JSON,JSONUtil.toJSON(carts));

    }

    /**
     * 当数据修改提交之前，需要先将变化过的SparseArray转换成list
     * @return
     */
    private List<ShoppingCart> sparseToList(){
        int size = data.size();
        List<ShoppingCart> list = new ArrayList<>(size);
        for (int i=0;i<size;i++){
            list.add(data.valueAt(i));
        }
        return list;

    }

    /**
     * 用来初始化，将所有的list转成s
     */
    private void listToSparse(){

        List<ShoppingCart> carts =  getDataFromLocal();

        if(carts!=null && carts.size()>0){

            for (ShoppingCart cart:
                    carts) {
                data.put(cart.getId().intValue(),cart);
            }
        }

    }

    /**
     * 获取json缓存数据，然后转成list
     * @return
     */
    public  List<ShoppingCart> getDataFromLocal(){
        //如果是多端平台的话，不可以缓存到share，应该存到云端，这样几个平台才可以同步
        String json = PreferencesUtils.getString(mContext,CART_JSON);
        List<ShoppingCart> carts =null;
        if(json !=null ){
            carts = JSONUtil.fromJson(json,new TypeToken<List<ShoppingCart>>(){}.getType());
        }
        return  carts;

    }
}
